#ifndef __CONTROL_H
#define __CONTROL_H

#include "bsp_timer.h"
#include "pid.h"
#include "foc.h"

#define SVPWM_FREQ MOTOR_PWM_FRE_HZ                   // 载波频率
#define SVPWM_CYCLE (float)(1.0f / (float)SVPWM_FREQ) // 载波周期

#define PWM_DEADTIME (float)(1.0f) // (us) 死区时间  1.0

#define ADC_FULLSCALE_VOLT (float)(3.3f) // adc参考电压
#define ADC_FULL_BIT (1 << 12)         // 12位 adc
#define SHUNT_RES (float)(0.001f)        // 采样电阻
#define SHUNT_OPA_GAIN (float)(8.0f)     // 放大倍数

// 母线电压采集
#define R1_VBUS (float)(28.0f)
#define R2_VBUS (float)(2.0f)
#define VBUS_RATE (float)((R1_VBUS + R2_VBUS) / R2_VBUS)

// 相电流 计算系数
#define ADC_TO_CURRENT_COEF (float)(ADC_FULLSCALE_VOLT / ADC_FULL_BIT / SHUNT_RES / SHUNT_OPA_GAIN)
// 母线电压 计算系数
#define ADC_TO_VBUS_COEF (float)(ADC_FULLSCALE_VOLT * VBUS_RATE / ADC_FULL_BIT)
// 相电流校准次数
#define PHASE_CURRENT_CALIB_TIME (1000)

#define VBUS_OVER_AMP (float)(24.0f)  // 母线电压 限制值 单位V
#define VBUS_LIMIT_COEF (float)(0.1f) // 限制系数

#define MOS_TEMP_MAX_LIMIT (float)(80.0f) // 温度上限
#define MOS_TEMP_MIN_LIMIT (float)(0.0f)  // 温度下限

#define CONTROL_SPEED_ACC (float)(100.0f / (float)SVPWM_FREQ) // 加速度
#define CONTROL_POWER_ACC (float)(100.0f / (float)SVPWM_FREQ) // 加功率

// 上限限制
#define CONTROL_LIMIT_POWER (float)(100.0f)   // 限制功率(单位:W)
#define CONTROL_LIMIT_SPEED (float)(30000.0f) // 限制速度(单位:rpm)

typedef struct _control
{
	/* pid */
    pid_t pid_d;  // d轴PI
    pid_t pid_q;  // d轴PI  
    pid_t pid_w;  // 功率环pi
    pid_t pid_v;  // 速度环pi

	/* SVPWM */
	float pwm_period;
	float pwma;
	float pwmb;
	float pwmc;
	uint8_t sector;

	/* 控制流程 */
	uint8_t current_state;

	foc_t foc;
}control_t;

#endif
